// 国际化API服务 - 基于 i18next
const express = require('express');
const router = express.Router();
const fs = require('fs').promises;
const path = require('path');
const { authenticateToken } = require('../middleware/auth');
const Authorization = require('../middleware/authorization');
const { initI18n, getSupportedLanguages, getCurrentLanguage } = require('../config/i18n');

// 获取支持的语言列表
router.get('/i18n/languages', async (req, res) => {
  try {
    const localesPath = path.join(__dirname, '../../../locales');
    const files = await fs.readdir(localesPath);
    
    const languages = files
      .filter(file => file.endsWith('.json'))
      .map(file => {
        const langCode = file.replace('.json', '');
        return {
          code: langCode,
          name: getLanguageName(langCode),
          nativeName: getNativeLanguageName(langCode)
        };
      });
    
    res.json({
      success: true,
      data: languages
    });
  } catch (error) {
    console.error('获取语言列表失败:', error);
    res.status(500).json({
      success: false,
      message: '获取语言列表失败'
    });
  }
});

// 获取指定语言的翻译文件
router.get('/i18n/translations/:language', async (req, res) => {
  try {
    const { language } = req.params;
    const filePath = path.join(__dirname, '../../../locales', `${language}.json`);
    
    const data = await fs.readFile(filePath, 'utf8');
    const translations = JSON.parse(data);
    
    res.json({
      success: true,
      data: translations
    });
  } catch (error) {
    console.error('获取翻译文件失败:', error);
    res.status(500).json({
      success: false,
      message: '获取翻译文件失败'
    });
  }
});

// 更新翻译内容（管理员权限）
router.put('/i18n/translations/:language', authenticateToken, Authorization.requireRole(['admin']), async (req, res) => {
  try {
    const { language } = req.params;
    const { translations } = req.body;
    
    if (!translations) {
      return res.status(400).json({
        success: false,
        message: '翻译内容不能为空'
      });
    }
    
    const filePath = path.join(__dirname, '../../../locales', `${language}.json`);
    await fs.writeFile(filePath, JSON.stringify(translations, null, 2));
    
    res.json({
      success: true,
      message: '翻译文件更新成功'
    });
  } catch (error) {
    console.error('更新翻译文件失败:', error);
    res.status(500).json({
      success: false,
      message: '更新翻译文件失败'
    });
  }
});

// 获取系统语言设置
router.get('/i18n/settings', async (req, res) => {
  try {
    const defaultSettings = {
      defaultLanguage: 'zh-CN',
      supportedLanguages: ['zh-CN', 'en-US'],
      autoDetect: true,
      languageSwitcher: true
    };
    
    res.json({
      success: true,
      data: defaultSettings
    });
  } catch (error) {
    console.error('获取语言设置失败:', error);
    res.status(500).json({
      success: false,
      message: '获取语言设置失败'
    });
  }
});

// 设置用户语言偏好
router.post('/i18n/set-language', async (req, res) => {
  try {
    const { language } = req.body;
    
    if (!language) {
      return res.status(400).json({
        success: false,
        message: '语言参数不能为空'
      });
    }
    
    // 验证语言是否支持
    const supportedLanguages = [
      'zh-CN', 'zh-TW', 'en-US', 'en-GB', 'ja-JP', 'ko-KR', 
      'fr-FR', 'de-DE', 'es-ES', 'es-MX', 'pt-BR', 'pt-PT',
      'ru-RU', 'ar-SA', 'hi-IN', 'th-TH', 'vi-VN'
    ];
    
    if (!supportedLanguages.includes(language)) {
      return res.status(400).json({
        success: false,
        message: '不支持的语言'
      });
    }
    
    // 这里可以将用户语言偏好保存到数据库或session
    // 暂时返回成功响应
    res.json({
      success: true,
      message: '语言设置成功',
      data: {
        language: language,
        timestamp: new Date().toISOString()
      }
    });
  } catch (error) {
    console.error('设置语言失败:', error);
    res.status(500).json({
      success: false,
      message: '设置语言失败'
    });
  }
});

// 更新系统语言设置（管理员权限）
router.put('/i18n/settings', authenticateToken, Authorization.requireRole(['admin']), async (req, res) => {
  try {
    const { defaultLanguage, supportedLanguages, autoDetect, languageSwitcher } = req.body;
    
    // 验证必填字段
    if (!defaultLanguage || !supportedLanguages || !Array.isArray(supportedLanguages)) {
      return res.status(400).json({
        success: false,
        message: '语言设置参数不完整'
      });
    }
    
    // 这里可以将设置保存到数据库或配置文件
    // 暂时返回成功响应
    res.json({
      success: true,
      message: '语言设置更新成功'
    });
  } catch (error) {
    console.error('更新语言设置失败:', error);
    res.status(500).json({
      success: false,
      message: '更新语言设置失败'
    });
  }
});

// 辅助函数：获取语言名称
function getLanguageName(code) {
  const languageNames = {
    'zh-CN': 'Chinese (Simplified)',
    'zh-TW': 'Chinese (Traditional)',
    'en-US': 'English (US)',
    'en-GB': 'English (UK)',
    'ja-JP': 'Japanese',
    'ko-KR': 'Korean',
    'fr-FR': 'French',
    'de-DE': 'German',
    'es-ES': 'Spanish',
    'es-MX': 'Spanish (Mexico)',
    'pt-BR': 'Portuguese (Brazil)',
    'pt-PT': 'Portuguese (Portugal)',
    'ru-RU': 'Russian',
    'ar-SA': 'Arabic',
    'hi-IN': 'Hindi',
    'th-TH': 'Thai',
    'vi-VN': 'Vietnamese'
  };
  return languageNames[code] || code;
}

// 辅助函数：获取本地语言名称
function getNativeLanguageName(code) {
  const nativeNames = {
    'zh-CN': '中文（简体）',
    'zh-TW': '中文（繁體）',
    'en-US': 'English',
    'en-GB': 'English',
    'ja-JP': '日本語',
    'ko-KR': '한국어',
    'fr-FR': 'Français',
    'de-DE': 'Deutsch',
    'es-ES': 'Español',
    'es-MX': 'Español',
    'pt-BR': 'Português',
    'pt-PT': 'Português',
    'ru-RU': 'Русский',
    'ar-SA': 'العربية',
    'hi-IN': 'हिन्दी',
    'th-TH': 'ไทย',
    'vi-VN': 'Tiếng Việt'
  };
  return nativeNames[code] || code;
}

module.exports = router;